import Cookie from 'js-cookie'
// import router from '../router';
export default {
  state: {
    isCollapse: false,
    tabsList:[
      {
        path: '/',
        name: 'Home',
        label: '首页',
        icon: 'home',
      }
    ],
    currentMenu: null,
    menu:[]
  },
  mutations: {

    collapseMenu(state) {
      state.isCollapse = !state.isCollapse;
    },

    //这里的val是页面发生点击跳转的时候传过来的参数
    selectMenu(state,val) {
      if(val.name !== 'home'){
        //高亮显示新的页面路由
        state.currentMenu = val
        //对每一个点击的val.name进行检验,如果是tabsList没有的就push进去菜单的数据
        const result = state.tabsList.findIndex(item => item.name === val.name)
        if(result === -1){
          state.tabsList.push(val)         
        }
      } else {/* 这个else对应是当前val.name === 'home'的话,对当前选中的标识进行重置*/
        state.currentMenu = null
      }
    },
    setMenu(state,val) {
      state.menu = val
      // 需要将我们的menu数据缓存到cookie中,避免我们在浏览器刷新的时候丢失menu数据
      Cookie.set('menu',JSON.stringify(val))
    },
    clearMenu(state){
      state.menu = []
      Cookie.remove('menu')
    },
    addMenu(state,router) {
      // 如果当前cookie中没有menu的数据 就直接return
      if(!Cookie.get('menu')) {
        return
      }
      // 如果有数据,先转成对象
      const menu = JSON.parse(Cookie.get('menu'))
      state.menu = menu
      const menuArray = []
      menu.forEach(item => {
        // 这里需要做判断 因为有些menu的数据中有些是一级菜单 有些是二级菜单
        if(item.children) {
          item.children = item.children.map(item => {
            item.component = () => import(`@/views/${item.url}`)
            return item /* 返回给item.children */
          })
          menuArray.push(...item.children) /* 用扩展运算符将二维数组扁平化 */
        } else { /*这里是一级菜单*/
          item.component = () => import(`@/views/${item.url}`)
          menuArray.push(item)
        }
      });
      // 路由的动态添加
      menuArray.forEach(item => {
        router.addRoute('Main',item)
      }) 

    },


    //这里的val是点击删除的那个tag
    closeTag(state,val){
      //findIndex判断为true的话,result为返回的符合条件的索引值
       const result = state.tabsList.findIndex( item => item.name === val.name) 
       if (result !== -1){
        //  从索引位删除一个
         state.tabsList.splice(result,1)
       }
    }
  }
}
